import { App } from 'vue';
import { createPinia, defineStore } from 'pinia';

const PiniaStore = createPinia();

const appStore: { [propName: string]: any } = {};

export default {
	install: (app: App): void => {
		app.use(PiniaStore);

		// 自动收集当前文件夹下 modules 文件夹中的 **.store.ts/js 和 各个业务模块的私有store
		const files: Record<string, any> = import.meta.glob(
			['./global.store.ts', '../global-layout-ui/store.ts', './webSocket.store.ts', '../view-modules/*/store.ts'],
			{
				eager: true
			}
		);

		// 注册收集每个store
		// appStore中每个属性的 key 字段 就是对应store文件中定义的 name 字段
		Object.keys(files).forEach((file: string) => {
			const item = files[file];
			if (!!item && !!item?.store) {
				appStore[item.store.name] = defineStore(item.store.name, item.store.function)();
			}
		});
	}
};

export { appStore };
